package com.css.ztb.config;

import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.interceptor.TransactionInterceptor;

import java.util.Properties;

/**
 * @project  cloudplatform
 * @package com.css.ztb.qxgl.config
 * @file TransactionConfig.java 创建时间:2019年6月19日下午5:20:17
 * @title 标题（要求能简洁地表达出类的功能和职责）
 * @description 描述（简要描述类的职责、实现方式、使用注意事项等）
 * @copyright Copyright (c) 2019 中国软件与技术服务股份有限公司
 * @company 中国软件与技术服务股份有限公司
 * @module 模块: 模块名称
 * @author   史雪涛
 * @reviewer 审核人
 * @version 1.0
 * @history 修订历史（历次修订内容、修订人、修订时间等）
 *
 */
@Configuration
public class TransactionConfig {

    /**
     * 
     * @name 中文名称
     * @description 相关说明
     * @time 创建时间:2018年12月26日下午4:36:57
     * @return TransactionInterceptor
     * @author 史雪涛
     * @history 修订历史（历次修订内容、修订人、修订时间等）
     */
    @Bean(name = "txAdvice")
    public TransactionInterceptor getAdvisor(@Qualifier("oracleTransactionManager") PlatformTransactionManager oracleTransactionManager) {
        final Properties properties = new Properties();
        properties.setProperty("query*", "PROPAGATION_REQUIRED,-Exception,readOnly");
        properties.setProperty("save*", "PROPAGATION_REQUIRED,-Exception");
        properties.setProperty("update*", "PROPAGATION_REQUIRED,-Exception");
        properties.setProperty("delete*", "PROPAGATION_REQUIRED,-Exception");
        return new TransactionInterceptor(oracleTransactionManager, properties);

    }

    /**
     * 
     * @name 中文名称
     * @description 相关说明
     * @time 创建时间:2018年12月26日下午4:37:17
     * @return BeanNameAutoProxyCreator
     * @author 史雪涛
     * @history 修订历史（历次修订内容、修订人、修订时间等）
     */
    @Bean
    public BeanNameAutoProxyCreator txProxy() {
        final BeanNameAutoProxyCreator creator = new BeanNameAutoProxyCreator();
        creator.setInterceptorNames("txAdvice");
        creator.setBeanNames("*ServiceImpl");
        creator.setProxyTargetClass(true);
        return creator;
    }
}
